package com.ujiuye.testcache;

import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

public class BloomFilterDemo {
    public static void main(String[] args) {
        int total = 1000000; // 预计要插入多少数据
        //fpp:容错率，出现误判的概率是多少。Funnels.stringFunnel(Charset.forName("UTF-8"))处理字符串
        BloomFilter<Integer> bf = BloomFilter.create(Funnels.integerFunnel(), total,0.01);
        // 初始化 1000000 条数据到过滤器中， 1，2，3 ~ 1000000
        for (int i = 1; i <= total; i++) {
            bf.put(i);//添加数据:根据k个hash函数找到对应的bit数组的下标并把数据改为 1
        }
        // 判断值是否存在过滤器中
        int count = 0;
        //故意去10000个不在过滤器里的值，看看有多少个会被认为在过滤器里
        for (int i = total + 10000; i < total + 20000; i++) {
            if (bf.mightContain(i)) { //误判
                count++;
            }
        }
        System.out.println("误判数量 " + count);
    }
}